Trojan Source
見た目と実際の挙動が異なるソースコードのこと。
Unicode Bidirectional Algorithmを利用するもの
Unicodeにはアラビア語やヘブライ語のように右から左の順番に配置するための特殊な不可視の文字がある。詳細な仕様はここ。 それらの文字を利用して文字列の並び替えを行うことで人間の目を騙すことが可能。
table:特殊な文字
略 コードポイント 名前 内容
LRE U+202A Left-to-Right Embedding 文字順を左から右へ
RLE U+202B Right-to-Left Embedding 文字順を右から左へ
LRO U+202D Left-to-Right Override
RLO U+202E Right-to-Left Override
LRI U+2066 Left-to-Right Isolate
RLI U+2067 Right-to-Left Isolate
FSI U+2068 First Strong Isolate
PDF U+202C Pop Directional Formatting 直前のLRE,RLE,LRO,RLOの終了
PDI U+2069 Pop Directional Isolate 直前のLRI,RLIの終了
LS U+2028 Line Separator JavaScriptで改行として使えるがVSCodeでは改行されない。 LRIとRLIを組み合わせることでほぼ任意に文字を並び替えることが可能。
RLI a b c d e f PDI
-> f e d c b aと表示される。
RLI LRI a b c PDI LRI d e f PDI PDI
-> d e f a b cと表示される。a b cとd e fがグループ化されている。
Early-return Attack
""" RLI """ ;return
参考